package com.sh.d1.gatewayserver;

import io.netty.channel.Channel;
import io.netty.util.AttributeKey;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * Id 读写者
 */
public final class IdSetterGetter {
    /**
     * 会话 Id
     */
    static private final String KEY_SESSION_ID = "session_id";
    /**
     * 用户 Id
     */
    static private final String KEY_USER_ID = "user_id";
    /**
     * 会话 Id 生成器
     */
    static private final AtomicInteger _sessionIdGen = new AtomicInteger(0);

    /**
     * 私有化类默认构造器
     */
    private IdSetterGetter() {
    }

    /**
     * 设置会话 Id
     *
     * @param ch 客户端信道
     */
    static public void setSessionId(Channel ch) {
        if (null == ch) {
            return;
        }

        ch.attr(AttributeKey.valueOf(KEY_SESSION_ID)).setIfAbsent(_sessionIdGen.incrementAndGet());
    }

    /**
     * 获取会话 Id
     *
     * @param ch 客户端信道
     * @return 会话 Id
     */
    static public int getSessionId(Channel ch) {
        if (null == ch) {
            return -1;
        }

        Object objVal = ch.attr(AttributeKey.valueOf(KEY_SESSION_ID)).get();

        if (objVal instanceof Integer) {
            return (Integer) objVal;
        } else {
            return -1;
        }
    }



    /**
     * 设置用户 Id
     *
     * @param ch 客户端信道
     */
    static public void setUserId(Channel ch,int userId) {
        if (null == ch) {
            return;
        }

        ch.attr(AttributeKey.valueOf(KEY_USER_ID)).setIfAbsent(userId);
    }

    /**
     * 获取会话 Id
     *
     * @param ch 客户端信道
     * @return 会话 Id
     */
    static public int getUserId(Channel ch) {
        if (null == ch) {
            return -1;
        }

        Object objVal = ch.attr(AttributeKey.valueOf(KEY_USER_ID)).get();

        if (objVal instanceof Integer) {
            return (Integer) objVal;
        } else {
            return -1;
        }
    }



}
